/* 第四天8 创建一个request.js  将axios导入副本,拦截器复制到该js暴露_fetch*/


/* 9 .1在src下创建一个api目录>register.js
导入axios 定义副本 定义一个api通过export 暴露出去
*/

//axios使用
import axios from 'axios'
/* 引入 message */
import {
    Message
} from 'element-ui' // 导入Message  Message相当于this.$message
/* 第四天 27.1导入获取token方法  */
import {getLocal,removeLocal} from '@/utils/local.js'

/* 34 导入路由实例对象*/
import router from '@/router/index.js'

/* 创建axios副本(修改axios的默认值) */
const _fetch = axios.create({
    baseURL: process.env.VUE_APP_URL,
    /* 第四天26 如果没配制vue.config.js的代理的这里的跨域带cookie一定要打开 */
    withCredentials:true   //解决跨域
})

/* 12.在register.js加入请求与响应拦截器 */
/* 在响应拦截通过获取到接口返回值后,只有在状态码为200的
    时候正常返回数据非200,错误提示了一下,跳转至.catch里面
*/

// 添加请求拦截器
_fetch.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    window.console.log('请求拦截',config)
    /* 第四天 27.2在请求拦截统一加上了请求头 */
    config.headers.token=getLocal('token')
    return config;
  }, 
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
_fetch.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    window.console.log('响应拦截',response)
    /* 只有在状态码为200的时候正常返回数据*/
    if(response.data.code==200){
        return response
        /* 34.针对拦截器加入206错误处理 提示一下删除token(导入删除方法)
            删除token(导入删除方法)
            路由跳转(导入路由实例对象)跳转至.catch执行
        */
    }else if(response.data.code==206){
      /* 提示一下 */
      Message.error(response.data.message)
      /* 清除token */
      removeLocal('token')
      //跳转至登录页 this.$router===router的实例对象
      router.push('/login')
      //不是200情况我们都不希望then再执行,直接让它跳转到.catch
      return Promise.reject(response.data.message)
    }else{
        
        Message.error(response.data.message)
        //Message相当于this.$message
        // return undefined
        /* 不是 200情况,我们都不希望.then再执行,直接让它跳转到.catch, .then是成功 catch就是失败*/
        return Promise.reject(response.data.message)
    }
    
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });

export default _fetch 